code:
	org 0100h

	mov al, 13h                 	;MCGA mode (320x200x256).
	int 10h                    	;Video interrupt request.

	les bp,[bx]		;2b	;video mem offset trick, is slightly off though [-16]

;	push word 0xa000	;3b	;Video memory
;	pop es			;1b

ROT	xor di, di		;2b
	xor si, si
	mov cl, 3		;2b

ROTT	inc word [di+@Buffer]	;4b	;increase attr angle
	fild word [di+@Buffer]	;4b	;load attr angle
	fidiv word [@Buffer+6]	;4b	;scale 0 - rad - 6.3
	fsincos			;2b	; angle sin - st1 | cos - st0

	fimul word [@Buffer+8]		;4b	;scale_x * radius
	fistp word [di+@Buffer+10]	;4b	;attr_x = radius * cos (angle)
	fimul word [@Buffer+6]		;4b	;scale_y * radius
	fistp word [di+@Buffer+18]	;4b	;attr_y = radius * sin (angle)

	stosw			;1b	;increment di by 2
	loop ROTT		;2b

;	dec cx			;1b	;0 -> 0xFFFF
;	xor ax, ax		;2b
;	rep stosb		;2b	;clear everything else

;	dec cx			;1b
	mov si, 410
	mov di, 410
	mov ch, 0xF6
	rep movsb		;2b	;ds to video

	mov ch, 0xF7
	mov di, 410
CLEAR	mov byte [di], 0		;clear ds, keep variables
	inc di
	loop CLEAR

DRAW	push di			;1b

	imul di, dx, 320	;7b	; di = x + (y * 320)
	add di, bx		;2b	;

	add di, 0xBC30		;4b	; offset to center [0,0 @ 160,150]
					; bc20 = (150*320+160) + 16 for les offset

;	stosb			;1b	; draw pixel
	mov [di], al		;2b

	pop di			;1b

RAND3	add ax, di		;2b
	rol ax, 2		;5b	; Psudo-random		[fast, big :( compatable]
	add di, ax		;2b

	and di, 6		;2b	;[mask 00000110]

	mov bp, word [di+@Buffer+10]	;4b	; Load Attractor
	mov si, word [di+@Buffer+18]	;4b
	
ATTR	sub bp, bx		;2b	; (DI - x)
	sar bp, 1		;4b	; ((DI - x) / 2)
	add bx, bp		;2b	; x + ((DI - x) / 2)

	sub si, dx		;2b	; (DX - y)
	sar si, 1		;4b	; ((DX - y) / 2)
	add dx, si		;2b	; y + ((DX - y) / 2)

	dec cx			;1b
	jne DRAW 		;2b

DRAWEND	in al, 60h		;2b	;Read value from port 60h (keyboard)
	dec al			;2b	;ESC key (scancode 1) 	[dec ax saves a byte but]
	jnz ROT			;2b	;Zero, END		[doesnt work outside windows]

END	ret			;1b	;DIE

data:
@Buffer		dw 0,105,210, 49,99, 0,-100,100,0, 0,45,45,-150